Python 24일 코스 - Day 16: 정규표현식

Day 16: 정규표현식

기본 사용법

import re

text = "전화번호: 010-1234-5678, 이메일: user@example.com"

# 패턴 검색
phone = re.search(r"\d{3}-\d{4}-\d{4}", text)
if phone:
    print(phone.group())  # 010-1234-5678

주요 패턴 문법

패턴설명예시
\d숫자\d+ -> “123”
\w문자/숫자/언더스코어\w+ -> “hello_1”
\s공백\s+ -> ” “
.아무 문자a.c -> “abc”
*0회 이상ab*c -> “ac”, “abc”
+1회 이상ab+c -> “abc”
?0 또는 1회colou?r -> “color”
{n,m}n~m회 반복\d{2,4} -> “12”, “1234”
[]문자 클래스[aeiou] -> 모음
^ / $시작 / 끝^Hello
()그룹 캡처(\d+)-(\d+)

주요 함수

text = "사과 3개, 바나나 5개, 체리 12개"

# findall: 모든 매칭 찾기
numbers = re.findall(r"\d+", text)
print(numbers)  # ['3', '5', '12']

# sub: 치환
cleaned = re.sub(r"\d+", "N", text)
print(cleaned)  # 사과 N개, 바나나 N개, 체리 N개

# split: 분할
parts = re.split(r",\s*", text)
print(parts)  # ['사과 3개', '바나나 5개', '체리 12개']

그룹 캡처

pattern = r"(?P<year>\d{4})-(?P<month>\d{2})-(?P<day>\d{2})"
match = re.search(pattern, "오늘은 2026-04-20입니다")

if match:
    print(match.group("year"))   # 2026
    print(match.group("month"))  # 04
    print(match.group("day"))    # 20

이메일 검증 예제

def is_valid_email(email):
    pattern = r"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$"
    return bool(re.match(pattern, email))

print(is_valid_email("user@example.com"))   # True
print(is_valid_email("invalid-email"))      # False

오늘의 연습문제

  1. 텍스트에서 모든 URL을 추출하는 정규표현식을 작성하세요.
  2. 비밀번호 강도를 검증하세요 (대/소문자, 숫자, 특수문자 포함 8자 이상).
  3. HTML 태그를 제거하는 함수를 정규표현식으로 만드세요.

이 글이 도움이 되었나요?